/***********************************************************************************
Copy right:	    Coffee Tech.
Author:         jiaoyue
Date:           2022-03-24
Description:    http请求自定义处理部分
***********************************************************************************/

#ifndef CUSTOM_HANDLE_H
#define CUSTOM_HANDLE_H
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include <arpa/inet.h>
#include <sys/msg.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "cJSON.h"
#include "shmem.h"
#include "msg_queue_peer.h"
#include <sqlite3.h>

#define ADDRESS "tcp://192.168.51.74:1883"
#define CLIENTID "ExampleClient"
#define TOPIC1 "up"
#define TOPIC2 "down"
#define QOS 1
#define TIMEOUT 10000L
#define MAX_NODE 128  //最大支持节点数目，实际可用是127
#define STD_NODE_LEN sizeof(stm_node_t)
#define MAX_NODE_SIZE (MAX_NODE * STD_NODE_LEN)
#define user_db_path "/home/hq/c/config/user.db"
#define project_path "/home/hq/c/config/project.json"

typedef union val
{
    int b_val;   // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
} val_t;

typedef struct stm_node
{
    int key;       // 唯一键值
    int type;      // 数据点类型
    int dev_type;  // 数据点属于哪个设备，根据网关支持的设备自行定义
    val_t old_val; // 变化上报后需要更新旧值
    val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;       // 默认为-1，采集成功后设置为0，采集失败再置-1
} stm_node_t, *stm_node_p;

typedef struct modbus_set // Modbus数据点设置结构体
{
    int key;       // 数据点标识符
    int type;      // 数据点类型
    int dev_type;  // 数据点属于哪个设备，根据网关支持的设备自行定义
    val_t old_val; // 变化上报后需要更新旧值
    val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;       // 默认为-1，采集成功后设置为0，采集失败再置-1
    char name[32]; // 数据点名称
    int addr;      // 寄存器地址
} modbus_set_t, *modbus_set_p;

enum
{
    TYPE_INT = 1,
    TYPE_BOOL = 2,
    TYPE_FLOAT = 3
};

//消息队列结构体
typedef struct msgbuf
{
    long mtype;
    int mkey;
    char value[16];
    int addr;
} msgbuf_t, *msgbuf_p;

#endif  // CUSTOM_HANDLE_H
